using System.Collections; using System.Collections.Generic; using UnityEngine; public class BossSlimeMovement : MonoBehaviour { //GameObjects private GameObject target; // player private OpenUpgrades openUpgrades; public GameObject goToUpgrades; // go to upgrades info //Animation private Animator myAnim; //Files private BossSlimeRangedAttack bossSlimeRangedAttack; //Floats public float moveForce = 2; public float moving = 2; public float stopped = 0; public float maxrange = 9; public float minrange = 2f; // so that the enemy doesn't push the player //Ints private int pointsIndex; //Bools public bool following = false; //Arrays private Vector3[] positionArray; void Start() { //Files bossSlimeRangedAttack = FindObjectOfType<BossSlimeRangedAttack>(); openUpgrades = FindObjectOfType<OpenUpgrades>(); //GameObjects target = GameObject.FindGameObjectWithTag("Player"); goToUpgrades = GameObject.FindGameObjectWithTag("Open Upgrades"); //Components myAnim = GetComponent<Animator>(); //Arrays positionArray = new[] { new Vector3(-185.07f, -96.78f), new Vector3(-185.07f, -107.8f), new Vector3(-165.52f, -107.8f), new Vector3(-165.52f, -96.78f) }; //Variables pointsIndex = 0; } void Update() { if (Vector3.Distance(transform.position, target.transform.position) <= maxrange && Vector3.Distance(transform.position, target.transform.position) > minrange) { FollowPlayer(); openUpgrades.enabled = false; goToUpgrades.gameObject.SetActive(false); bossSlimeRangedAttack.enabled = true; following = true; } else if (Vector3.Distance(transform.position, target.transform.position) <= minrange) { AttackPlayerAnim(); bossSlimeRangedAttack.enabled = false; } else if (Vector3.Distance(transform.position, target.transform.position) >= maxrange) { GoStartingPos(); openUpgrades.enabled = true; goToUpgrades.gameObject.SetActive(true); following = false; } } public void FollowPlayer() { moveForce = moving; myAnim.SetBool("isMoving", true); myAnim.SetFloat("moveX", (target.transform.position.x - transform.position.x)); myAnim.SetFloat("moveY", (target.transform.position.y - transform.position.y)); transform.position = Vector3.MoveTowards(transform.position, target.transform.position, moveForce * Time.deltaTime); } public void AttackPlayerAnim() { moveForce = stopped; myAnim.SetBool("isMoving", false); } public void GoStartingPos() { moveForce = moving; myAnim.SetBool("isMoving", true); myAnim.SetFloat("moveX", (positionArray[pointsIndex].x - transform.position.x)); myAnim.SetFloat("moveY", (positionArray[pointsIndex].y - transform.position.y)); transform.position = Vector3.MoveTowards(transform.position, positionArray[pointsIndex], moveForce * Time.deltaTime); if (transform.position == positionArray[pointsIndex]) { //Next point of the array of Locations pointsIndex++; } if (pointsIndex == (positionArray.Length)) { //Going Back to the start point pointsIndex = 0; } } }